#ifndef FASYS_LIBS_API_CREATE_SUBSCRIPTION_HPP
#define FASYS_LIBS_API_CREATE_SUBSCRIPTION_HPP

#include "types.hpp"

namespace fasys{ namespace api{

struct subscription_channel_base
{
  std::string channel;
  size_t min_size;
  size_t max_size;
  subscription_channel_base()
    : min_size(1)
    , max_size(10)
  {}
};

struct subscription_channel_request
  : subscription_channel_base
{
  subscription_channel_request()
    : subscription_channel_base()
  {
  }
};

struct subscription_channel_response
    : subscription_channel_base
{
  channel_id_t channel_id;
  subscription_channel_response()
    : subscription_channel_base()
    , channel_id(0)
  {
  }
};


struct create_subscription_base
{
  // Время жизни подписки
  time_t lifetime;
  // Время ожидания, после чего происходит уведомление что ничего не произошло
  time_t timeout;

  create_subscription_base()
    : lifetime(120)
    , timeout(60){}
};

struct create_subscription_request
  : create_subscription_base
{
  typedef std::list<subscription_channel_request> channel_list_type;
  channel_list_type channel_list;

  create_subscription_request()
    : create_subscription_base()
  {
  }
};

struct create_subscription_response
    : create_subscription_base
{
  typedef std::list<subscription_channel_response> channel_list_type;

  subscribe_id_t subscribe_id;
  std::string subscribe_uuid;
  channel_list_type channel_list;

  create_subscription_response()
    : create_subscription_base()
  {
  }
};


}}

#endif
